package com.itheima.reggie.common;

import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.sql.SQLIntegrityConstraintViolationException;

//全局异常处理
//==ResponseBondy+ControllerAdvice
//rest风格的异常处理器
//后边不加参数 也可以 默认扫描所有controller层
@RestControllerAdvice
//要被启动类扫描到 所以加这个注解
@Component
public class ExceptionCheckedHandler {
    //已经出异常了 只需要告诉前端异常信息
    //这是出现的用户名重复的异常 捕获
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R<String> SQLIntegrityConstraintViolationException(SQLIntegrityConstraintViolationException e) {
        //获得异常信息
        String message = e.getMessage();
        //判断 如果包含这个字段 说明是用户名重复的异常 就获取用户名 响应给前端
        if (message.contains("Duplicate entry")) {
            //重新赋值 切割信息 得到第二个元素
            message = message.split(" ")[2];
            return R.error(message + "已存在");
        }
        return R.error("你的操作可能有误，请重试");
    }

    /**
     *这是菜品关联异常 告诉虎不能删除
     * @param e
     * @return
     */

    @ExceptionHandler(RunException.class)
    public R<String> runException(RunException e){
        return R.error(e.getMessage());
    }

    /**
     * 删除异常 关联了套餐
     * @param d
     * @return
     */
    @ExceptionHandler(DeleteException.class)
    public R<String> deleteException(DeleteException d){
        return R.error(d.getMessage());
    }

}
